<?php
class ManageSciencesController extends AppController {
	/**
	 @var $name
	 @brief Tên của controller
	 */
	var $name = 'ManageSciences';
	
	/**
	 @var $components
	 @brief Danh sách tất cả các Component được sử dụng trong controller
	 */
	var $components = array('MultiFileUpload');
	
	/**
	 @var $uses
	 @brief Danh sách tất cả các model được sử dụng trong controller
	 */
	var $uses = array('sciences.Science');
	
	/**
	 @var $helpers
	 @brief Danh sách tất cả các Helper được sử dụng trong view
	 */
	var $helpers = array('Form','Wysiwyg');
	
	/**
	 @var $category_root_id
	 @brief Id của danh mục gốc của hệ thống quản lý trang
	 */
	var $category_root_id = null;
	
	
	function beforeFilter() {
		parent::beforeFilter();
		
		$this->configs = $this->Science->loadConfig();
//		$this->params['named']['root'] = '';
//		$this->category_root_id = $this->configs['Category']['root_id'];
		$this->set('configs', $this->configs);
	}
	
	/**
	 * ----------- Manage của editable page ------------------
	 */
	

	/**
	 * Hành động liệt kê ra danh sách các trang, có phân trang
	 */
	function index() {
		$this->paginate['Science'] = array(
			'limit' => 10,
			'order'	=> 'created desc'
		);
		$data = $this->paginate('Science');
		$this->set('pages', $data);
	}
	
	/**
	 * Phương thức được sử dụng để tạo mới một trang, bao gồm hiển thị form nhập liệu và xử lý các thông tin nhập liệu đó
	 */
	function add() {
		if (empty($this->data)) {
			// load dữ liệu trong trường hợp phát sinh lỗi
			$this->__checkError('Science');
		} else {
			try {
				// Create Category Information
				//debug($this->data);
				$this->data = $this->Science->validateData($this->data);
			} catch (Exception $ex) {
				$this->__setError('Science');
				$this->Session->setFlash($ex->getMessage(), "flash_error");
				$this->redirect("/".$this->params['url']['url']);
			}
			// Xử lý với image
			$image = "";
			//debug($this->data);exit;
			if (isset($this->configs['Science']['image']['show']) && $this->configs['Science']['image']['show']) {
				$this->MultiFileUpload->encode_filename = false;
				$this->MultiFileUpload->uploadpath = $this->configs['Science']['image']['path'];
				if (isset($this->configs['Science']['upload']) && isset($this->configs['Science']['upload']['AttachTypeAllowed'])) {
					$this->MultiFileUpload->_properties['AttachTypeAllowed'] = $this->configs['Science']['upload']['AttachTypeAllowed'];
				}
				
				$imgRet = array();
				try {
					$imgRet = $this->MultiFileUpload->upload();
				} catch (Exception $ex) {
					$this->Session->setFlash($ex->getMessage(), "flash_error");
					$this->redirect(array(
						'action'	=> 'index'
					));
				}

				if (count($imgRet) && isset($imgRet['image']['image'])) {
					// assign name to image field.
					$this->data['Science']['image'] = $imgRet['image']['image'];
					
					App::import('Vendor','images/my_image'); 
					$thumbnail_dir = $this->configs['Science']['thumbnail']['path'];
					
					// Nếu chế độ là tự động resize, tiến hành resize
					$my_image = new my_image($this->MultiFileUpload->uploadpath.$imgRet['image']['image']);
					if (isset($this->configs['Science']['image']['autoResize']) && $this->configs['Science']['image']['autoResize']) {
						// resize image
						$my_image->thumbnail(
							$this->configs['Science']['image']['width'],
							$this->configs['Science']['image']['height'],
							$this->configs['Science']['image']['percent']
						);
						$my_image->copyTo($this->MultiFileUpload->uploadpath.$imgRet['image']['image']);
					}

                    //Crop image
                    if ($this->configs['Science']['crop']['crop']) {
                        $crop_dir = $this->configs['Science']['crop']['path'];
						if (!is_dir($crop_dir)) {
							mkdir($crop_dir);
						}
                        $size      = GetImageSize($my_image->file);
                        if(($this->configs['Science']['crop']['width'] < $size[0]) and ($this->configs['Science']['crop']['height'] < $size[1])){
                            $ext = strrchr($imgRet['image']['image'], ".");
        					$pos = strrpos($imgRet['image']['image'], ".");
        					$filename = substr($imgRet['image']['image'],0,$pos);
        					$crop_name = $filename."_crop".$ext;
        					$my_image->copyTo($crop_dir.$crop_name);
                            /*Crop 1 -> bug */
//                            $crop_image = new my_image($this->MultiFileUpload->uploadpath.$crop_name);
//                            $crop_image->cropimage(
//                                $size[0],
//                                $size[1],
//                                $this->configs['Science']['crop']['width'],    
//        						$this->configs['Science']['crop']['height']
//                            );
                            /*Crop 2*/
                            $my_image->crop_image(
                                $this->configs['Science']['crop']['uri'].$filename."_crop".$ext,
        						$size[0],
                                $size[1],
                                $this->configs['Science']['crop']['width'],    
        						$this->configs['Science']['crop']['height']
        					);
                        }else{
                            $this->Session->setFlash(__("Kích thước crop lớn hình ảnh thực, xin vui lòng chọn lại hình ảnh khác!", true), "flash_error");
                        }
                    }
                    //End crop        

					if ($this->configs['Science']['thumbnail']['thumbnail']) {
						if (!is_dir($thumbnail_dir)) {
							mkdir($thumbnail_dir);
						}
						// create thumbnail
						$my_image->thumbnail(
							$this->configs['Science']['thumbnail']['width'],
							$this->configs['Science']['thumbnail']['height'],
							$this->configs['Science']['thumbnail']['percent']
						);
						
						$ext = strrchr($imgRet['image']['image'], ".");
						$pos = strrpos($imgRet['image']['image'], ".");
						$filename = substr($imgRet['image']['image'],0,$pos);
						$thumbnail_name = $filename."_thumbnail".$ext;
						$my_image->copyTo($thumbnail_dir.$thumbnail_name);
					}
                    
                                

					$image = $imgRet['image']['image'];
				}
			}
			
			$this->Science->create($this->data);
			if ($this->Science->save($this->data)) {
			
				$this->Session->setFlash(__("Luận khoa học đã được tạo mới thành công!", true), "flash_success");
				$this->redirect(array(
					'action'	=> 'index',
				));
			} else {
				if (isset($this->configs['Science']['image']['show']) && $this->configs['Science']['image']['show']) {
					// Delete uploaded image
					$this->Science->delete_image($image, $this->configs);
				}
				
				$this->__setError('Science');
				$this->Session->setFlash(__("Không thể lưu thông tin luận khoa học này. Bạn vui lòng thử lại!", true), "flash_error");
				$this->redirect("/".$this->params['url']['url']);
			}
		}
	}
	
	/**
	 * Phương thức được sử dụng để chỉnh sửa thông tin một trang, bao gồm hiển thị form nhập liệu và xử lý các thông tin nhập liệu đó
	 * @param $id ID của trang cần chỉnh sửa
	 */
	function edit($id=null) {
		if (empty($this->data)) {
			$this->data = $this->Science->read(null, $id);
            //debug($this->data);exit;
			// load dữ liệu trong trường hợp phát sinh lỗi
			$this->__checkError('Science');
		} else {
			try {
			//	debug($this->data); exit;
				// Create Category Information
				$this->data = $this->Science->validateData($this->data);
			} catch (Exception $ex) {
				$this->__setError('Science');
				$this->Session->setFlash($ex->getMessage(), "flash_error");
				$this->redirect("/".$this->params['url']['url']);
			}
			
			// Xử lý hình ảnh
			$image = "";
			if (isset($this->configs['Science']['image']['show']) && $this->configs['Science']['image']['show']) {
				$oldImage = "";
				$this->MultiFileUpload->encode_filename = false;
				$this->MultiFileUpload->uploadpath = $this->configs['Science']['image']['path'];
				if (isset($this->configs['Science']['upload']) && isset($this->configs['Science']['upload']['AttachTypeAllowed'])) {
					$this->MultiFileUpload->_properties['AttachTypeAllowed'] = $this->configs['Science']['upload']['AttachTypeAllowed'];
				}
				
				$imgRet = array();
				try {
					$imgRet = $this->MultiFileUpload->upload();
				} catch (Exception $ex) {
					$this->Session->setFlash($ex->getMessage(), "flash_error");
					$this->redirect(array(
						'action' => 'index'
					));
				}
				
				if (count($imgRet) && isset($imgRet['image']['image'])) {
					// assign name to image field.
					$this->data['Science']['image'] = $imgRet['image']['image'];
					App::import('Vendor','images/my_image'); 
					$thumbnail_dir = $this->configs['Science']['thumbnail']['path'];
					
					$my_image = new my_image($this->MultiFileUpload->uploadpath.$imgRet['image']['image']);
					if (isset($this->configs['Science']['image']['autoResize']) && $this->configs['Science']['image']['autoResize']) {
						
						// resize image
						$my_image->thumbnail(
							$this->configs['Science']['image']['width'],
							$this->configs['Science']['image']['height'],
							$this->configs['Science']['image']['percent']
						);
						$my_image->copyTo($this->MultiFileUpload->uploadpath.$imgRet['image']['image']);
					}
					
					if ($this->configs['Science']['thumbnail']['thumbnail']) {
						if (!is_dir($thumbnail_dir)) {
							mkdir($thumbnail_dir);
						}
						// create thumbnail
						$my_image->thumbnail(
							$this->configs['Science']['thumbnail']['width'],
							$this->configs['Science']['thumbnail']['height'],
							$this->configs['Science']['thumbnail']['percent']
						);
						
						$ext = strrchr($imgRet['image']['image'], ".");
						$pos = strrpos($imgRet['image']['image'], ".");
						$filename = substr($imgRet['image']['image'],0,$pos);
						$thumbnail_name = $filename."_thumbnail".$ext;
						$my_image->copyTo($thumbnail_dir.$thumbnail_name);
					}
					
					$image = $imgRet['image']['image'];
					
					// Get Old Image
					$oldImage = $this->Science->field('image');
				}
			}
			
			if ($this->Science->save($this->data)) {
				if (isset($this->configs['Science']['image']['show']) && $this->configs['Science']['image']['show']) {
					// delete old image
					$this->Science->delete_image($oldImage, $this->configs);
				}
				// Related Pages
				$this->Session->setFlash(__("Luận khoa học đã được cập nhật thành công!", true), "flash_success");
				$this->redirect(array(
					'action'	=> 'edit',
					$id,
				));
			} else {
				if (isset($this->configs['Science']['image']['show']) && $this->configs['Science']['image']['show']) {
					// Delete uploaded image
					$this->Science->delete_image($image, $this->configs);
				}
				$this->__setError('Science');
				
				$this->Session->setFlash(__("Không thể cập nhật thông tin luận khoa học này. Bạn vui lòng thử lại", true), "flash_error");
				
				// Redirect to current page for refreshing
				$this->redirect("/".$this->params['url']['url']);
			}
		}
	}
	
	/**
	 * Hành động delete được sử dụng để xóa 1 trang, bao gồm thông tin dữ liệu của trang và các thông tin liên quan như hình ảnh, dữ liệu liên quan, ...
	 * @param $id ID của trang cần xóa
	 */
	function delete($id) {
		// Delete Image First
		try {
			$this->Science->deletePage($id);
			$this->Session->setFlash(__("Luận khoa học đã được xóa thành công!", true), "flash_success");
			$this->redirect(array(
				'action'	=>	'index',
			));
		} catch (Exception $ex) {
			$this->Session->setFlash(__("Không thể xóa luận khoa học này. Bạn vui lòng thử lại", true), "flash_error");
			$this->redirect(array(
				'action'	=>	'index',
			));
		}
	}
	
	/**
	 * Phương thức được sử dụng để xóa hình ảnh của trang, bao gồm cả xóa thông tin dữ liệu và hình ảnh trên ổ cứng (kể cả thumbnail nếu có)
	 * @return unknown_type
	 */
	function delete_image() {
		if (isset($this->params['named']['page_id'])) {
			$id = intval($this->params['named']['page_id']);
			
			// Delete image in database
			$oldImage = $this->Science->deleteImage($id);
			
			// Delete image in hard-disk
			$this->Science->delete_image($oldImage, $this->configs);
			
			// redirect
			$this->Session->setFlash(__("Hình đại diện cho luận khoa học đã được xóa thành công!", true), "flash_success");
			$this->redirect(array(
				'action'=>'edit', 
				$id
			));
		} else {
			$this->Session->setFlash(__('Sai mã luận khoa học', true), "flash_error");
			$this->redirect(array(
				'action'=>'index'
			));
		}
	}
	
	function mass_delete() {
		$checkboxes = array();
		if (isset($_POST['checkbox_index'])) {
			$checkboxes = $_POST['checkbox_index'];
		}
		if (count($checkboxes) > 0) {
			foreach ($checkboxes as $id) {
				$this->Science->deletePage($id);
			}
			
			$this->Session->setFlash(__("Luận khoa học đã được xóa thành công!", true), "flash_success");
			$this->redirect(array(
				'action'	=>	'index'
			));
		} else {
			$this->Session->setFlash(__("Bạn vui lòng chọn các luận khoa học cần xóa", true), "flash_error");
			$this->redirect(array(
				'action'	=>	'index'
			));
		}
	}
	
	function publish() {
		$checkboxes = array();
		if (isset($_POST['checkbox_index'])) {
			$checkboxes = $_POST['checkbox_index'];
		}
		if (count($checkboxes) > 0) {
			foreach ($checkboxes as $id) {
				$this->Science->updateAll(
					// fields
					array('is_published'	=> 1),
					
					// conditions
					array('Science.id'	=> $checkboxes)
				);
			}
			
			$this->Session->setFlash(__("Các luận khoa học đã được kích hoạt!", true), "flash_success");
			$this->redirect(array(
				'action'	=>	'index'
			));
		} else {
			$this->Session->setFlash(__("Bạn vui lòng chọn các luận khoa học cần kích hoạt", true), "flash_error");
			$this->redirect(array(
				'action'	=>	'index'
			));
		}
	}
	function unpublish() {
		$checkboxes = array();
		if (isset($_POST['checkbox_index'])) {
			$checkboxes = $_POST['checkbox_index'];
		}
		if (count($checkboxes) > 0) {
			foreach ($checkboxes as $id) {
				$this->Science->updateAll(
					// fields
					array('is_published'	=> 0),
					
					// conditions
					array('Science.id'	=> $checkboxes)
				);
			}
			
			$this->Session->setFlash(__("Các luận khoa học đã được hủy kích hoạt!", true), "flash_success");
			$this->redirect(array(
				'action'	=>	'index'
			));
		} else {
			$this->Session->setFlash(__("Bạn vui lòng chọn các luận khoa học cần hủy kích hoạt", true), "flash_error");
			$this->redirect(array(
				'action'	=>	'index'
			));
		}
	}
}
?>